package com.sd.repay.transfer;

import com.sd.repay.pojo.TransferChannelInfo;
import com.sd.repay.pojo.TransferOrder;
import com.sd.repay.pojo.TransferRoute;

import java.sql.SQLException;
import java.util.List;

/**
 * @author 666666
 */
public interface TransferService {


    /**
     * 初始化出款订单明细
     *
     * @param transferOrder 订单明细
     * @return 订单ID
     * @throws SQLException
     * @throws Exception
     */
    public Long saveTransferOrder(TransferOrder transferOrder) throws SQLException, Exception;


    /**
     * 获取区间出款订单记录
     * <p>
     * <p>
     * 根据时间区间获取出款订单记录，status为订单状态，为空或Null则不计入查询条件之列
     *
     * @param startTime 起始时间
     * @param endTime   截止时间
     * @param status    出款状态
     * @return List<TransferOrder>
     */
    public List<TransferOrder> getTransferOrderListByTime(String startTime, String endTime, String... status);


    /**
     * 获取出款明细
     * <p>
     * <p>
     * 根据出款明细ID以及状态获取出款明细，订单状态为空或Null则不计入查询条件之列
     *
     * @param orderId 出款明细ID编号
     * @param status  出款状态
     * @return
     */
    public TransferOrder getTransferOrderById(String orderId, String status);


    /**
     * 获取出款明细
     * <p>
     * <p>
     * 根据订单类型、来源单号及出款状态获取出款明细，订单状态为空或Null则不计入查询条件之列
     *
     * @param orderType     订单类型
     * @param sourceOrderNo 来源订单
     * @param status        订单状态
     * @return TransferOrder
     */
    public TransferOrder getTransferOrder(String orderType, String sourceOrderNo, String status);


    /**
     * 获取代付通道信息集合
     * <p>
     * <p>
     * 获取所有状态为正常代付通道信息
     *
     * @return List<TransferChannelInfo>
     */
    public List<TransferChannelInfo> getTransferChannelInfoList();


    /**
     * 获取代付通道信息
     * <p>
     * <p>
     * 根据代付通道编码获取状态为正常的代付通道信息
     *
     * @param payBankCode 代付通道编码
     * @return TransferChannelInfo
     */
    public TransferChannelInfo getTransferChannelInfo(String payBankCode);


    /**
     * 获取代付通道信息
     * <p>
     * <p>
     * 根据代付通道编码以及出款账户获取状态为正常的代付通道
     *
     * @param payBankCode 代付通道编码
     * @param outAccNo    出款账户
     * @return TransferChannelInfo
     */
    public TransferChannelInfo getTransferChannelInfo(String payBankCode, String outAccNo);


    /**
     * 获取出款路由
     * <p>
     * <p>
     * 根据交易来源获取状态为正常的代付路由信息
     *
     * @param tradeSource 交易来源
     * @return TransferRoute
     */
    public TransferRoute getTransferRoute(String tradeSource);


    /**
     * 修改提交出款记录
     *
     * @param transferOrder 出款明细
     * @return 受影响的行数
     */
    public int modifySubStaTransfer(TransferOrder transferOrder);


    /**
     * 修改同步出款明细状态
     *
     * @param transferOrder 出款明细
     * @return 受影响的行数
     */
    public int modifySysStaTransfer(TransferOrder transferOrder);
}
